/*
破译密文

为使通讯消息保密，在军事应用中往往将明文按一定规律将其转换成密文再传输，收报人再按约定的规律将其译回明文。一种经典的加密方法是移位密码（Shift Cipher）, 又称恺撒密码。
对英文字母（A到Z和a到z）采取向后平行移动α位 (其中1 <= x <= 25)，其他字符（例如标点符号）保持不变。
如果英文字母已经是靠后的α个字母（‘W’到’Z’和’w’到’z’），则循环从’A’或’a’开始移位。

我方刚刚截获了敌方的一段长度为N的密电文, 但我方不知道对方的加密密钥alpha (1 <= alpha <= 25). 根据近期敌方密电活动分析, 敌方发送明文总是会以NJ开头. 请以此为突破口, 编写程序找出密钥并破解密文.
输入: 第一行是整数N, 第二行包含N个字符.
输出: 破解后的明文消息(N个字符).


INPUT: 整数N, 以及N个密文字符
OUTPUT: 解密后的明文
BEGIN
    读入前两个密文字符c1和c2;
    // 尝试所有可能的密钥alpha, 寻找能使c1和c2两个字母解密后等于N和J的密钥alpha;
    FOR alpha ← 1 to 25 DO
        // 根据密钥alpha解密字母c1
        IF c1是大写字母 THEN
            delta ← c1 - 'A';
        ELSE IF c1是小写字母
            delta ← c1 - 'a';
        ELSE
            // 非英语字母不需要解码
        END
        dd ← delta - alpha;
        IF dd < 0 THEN
            dd ← delta - alpha + 26;
        END
        // 根据修正后偏移量dd得到明文字母
        IF c1是大写字母 THEN
            y ← 'A' + dd;
        ELSE IF c1是小写字母
            y ← 'a' + dd;
        ELSE // 非英文字母原样保留
            y ← c1;
        END 
        d1 ← y;
        // 根据密钥alpha解密字母c2
        IF c2是大写字母 THEN
            delta ← c2 - 'A';
        ELSE IF c2是小写字母
            delta ← c2 - 'a';
        ELSE
            // 非英语字母不需要解码
        END
        dd ← delta - alpha;
        IF dd < 0 THEN
            dd ← delta - alpha + 26;
        END
        // 根据修正后偏移量dd得到明文字母
        IF c2是大写字母 THEN
            y ← 'A' + dd;
        ELSE IF c2是小写字母
            y ← 'a' + dd;
        ELSE // 非英文字母原样保留
            y ← c2;
        END
        d2 ← y;
        IF d1='N' AND d2='J' THEN
            BREAK; // 找到了合适的alpha
        END
    END
    输出NJ;
    //读入后续的N-2个字符, 根据密钥alpha对每一个字符依次进行解密并输出解密后的字符.
    FOR i := 1 to N-2 DO
        读入字母x;
        //y ← 根据alpha解密字母x;
        IF x是大写字母 THEN
            delta ← x - 'A';
        ELSE IF c1是小写字母
            delta ← x - 'a';
        ELSE
            // 非英语字母不需要解码
        END
        dd ← delta - alpha;
        IF dd < 0 THEN
            dd ← delta - alpha + 26;
        END
        // 根据修正后偏移量dd得到明文字母
        IF x是大写字母 THEN
            y ← 'A' + dd;
        ELSE IF x是小写字母
            y ← 'a' + dd;
        ELSE // 非英文字母原样保留
            y ← x;
        END 
        输出y;
    END
END
*/

#include <stdio.h>

int main(void){

// INPUT: 整数N, 以及N个密文字符
    int N;
    scanf("%d\n", &N); // 将整数和其后的换行符都读入
// OUTPUT: 解密后的明文
// BEGIN
//     读入前两个密文字符c1和c2;
    char c1, c2;
    scanf("%c%c", &c1, &c2);
//     // 尝试所有可能的密钥alpha, 寻找能使c1和c2两个字母解密后等于N和J的密钥alpha;
//     FOR alpha ← 1 to 25 DO
    int alpha = 0;
    for(alpha = 1; alpha <= 25; alpha++) {
        /* 技巧: 遇到FOR/WHILE或较大的IF等语句时,将该语句内涉及的变量都找出来,
           并定义在复合语句的开头.*/
        /* 注意确认变量类型 */
        int delta = 0, dd = 0;
        char y, d1, d2;
//         // 根据密钥alpha解密字母c1
//         IF c1是大写字母 THEN
//             delta ← c1 - 'A';
//         ELSE IF c1是小写字母
//             delta ← c1 - 'a';
//         ELSE
//             // 非英语字母不需要解码
//         END
        if (c1 >= 'A' && c1 <= 'Z') 
            delta = c1 - 'A';
        else if (c1 >= 'a' && c1 <= 'z')
            delta = c1 - 'a';
//         dd ← delta - alpha;
        dd = delta - alpha;
//         IF dd < 0 THEN
//             dd ← delta - alpha + 26;
//         END
        if (dd < 0)
            dd = delta - alpha + 26;
//         // 根据修正后偏移量dd得到明文字母
//         IF c1是大写字母 THEN
//             y ← 'A' + dd;
//         ELSE IF c1是小写字母
//             y ← 'a' + dd;
//         ELSE // 非英文字母原样保留
//             y ← c1;
//         END 
        if (c1 >= 'A' && c1 <= 'Z')
            y = 'A' + dd;
        else if (c1 >= 'a' && c1 <= 'z')
            y = 'a' + dd;
        else
            y = c1;
//         d1 ← y;
        d1 = y;
//         // 根据密钥alpha解密字母c2
//         IF c2是大写字母 THEN
//             delta ← c2 - 'A';
//         ELSE IF c2是小写字母
//             delta ← c2 - 'a';
//         ELSE
//             // 非英语字母不需要解码
//         END
        if (c2 >= 'A' && c2 <= 'Z')
            delta = c2 - 'A';
        else if (c2 >= 'a' && c2 <= 'z')
            delta = c2 - 'a';
//         dd ← delta - alpha;
        dd = delta - alpha;
//         IF dd < 0 THEN
//             dd ← delta - alpha + 26;
//         END
        if (dd < 0)
            dd = delta - alpha + 26;
//         // 根据修正后偏移量dd得到明文字母
//         IF c2是大写字母 THEN
//             y ← 'A' + dd;
//         ELSE IF c2是小写字母
//             y ← 'a' + dd;
//         ELSE // 非英文字母原样保留
//             y ← x;
//         END
        if (c2 >= 'A' && c2 <= 'Z')
            y = 'A' + dd;
        else if (c2 >= 'a' && c2 <= 'z')
            y = 'a' + dd;
        else
            y = c2;
//         d2 ← y;
        d2 = y;
//         IF d1='N' AND d2='J' THEN
//             BREAK; // 找到了合适的alpha
//         END
        if (d1 == 'N' && d2 == 'J')
            break;
//     END
    }
//     输出NJ;
        printf("NJ");
//     //读入后续的N-2个字符, 根据密钥alpha对每一个字符依次进行解密并输出解密后的字符.
//     FOR i := 1 to N-2 DO
        int i = 0;
        for(i = 1; i <= N-2; i++) {
            /* 集中定义所有变量 */
            char x, y;
            int delta, dd;
//         读入字母x;
            scanf("%c", &x);
//         //y ← 根据alpha解密字母x;
//         IF x是大写字母 THEN
//             delta ← x - 'A';
//         ELSE IF c1是小写字母
//             delta ← x - 'a';
//         ELSE
//             // 非英语字母不需要解码
//         END
            if (x >= 'A' && x <= 'Z')
                delta = x - 'A';
            else if (x >= 'a' && x <= 'z')
                delta = x - 'a';
//         dd ← delta - alpha;
            dd = delta - alpha;
//         IF dd < 0 THEN
//             dd ← delta - alpha + 26;
//         END
            if (dd < 0)
                dd = delta - alpha + 26;
//         // 根据修正后偏移量dd得到明文字母
//         IF x是大写字母 THEN
//             y ← 'A' + dd;
//         ELSE IF x是小写字母
//             y ← 'a' + dd;
//         ELSE // 非英文字母原样保留
//             y ← x;
//         END 
            if (x >= 'A' && x <= 'Z') {
                y = 'A' + dd;
            } else if (x >= 'a' && x <= 'z') {
                y = 'a' + dd;
            }
            else 
                y = x;
            printf("%c", y);            
//         输出y;
//     END
        }
// END
    return 0;    
}